体系的に学ぶ 安全ではないWebアプリケーションの壊し方
参考文献
https://gyazo.com/a1717228cb1715a371251cdf631bf86f
https://gyazo.com/14a5f11dd8fed7edddb2737ed6d85468
事前準備
git clone https://github.com/yuiseki/very-weak-web-app
cd very-weak-web-app
docker-compose up
https://gyazo.com/7b0e9d06f38b0ecb57c8ac047bc44d84
HTMLのインジェクション
単純なHTMLインジェクション
Form Inputに以下を入力してみる
<marquee>hoge</marquee>
<h1>hoge</h1>
<script>alert(0)</script>
https://gyazo.com/85c05a604627c9bf02a448e5e0653000
HTML属性へのHTMLインジェクション
Form Inputに以下を入力してみる
" /><marquee>hoge</marquee>
どのような場合に発生するのか
ユーザーからの入力を直接HTMLとして表示しているとき
なぜこれが危険なのか
任意のJavascriptを実行可能になる
任意のJavascriptを実行可能なら、任意のサーバーに表示したユーザーのCookieなどを送れる
どうやって対策するのか
ユーザーからの入力を直接HTMLとして表示しない
HTMLとして解釈されないように変換する=エスケープ
< → <
> → >
" → "
' → '
HTMLにはこのような特殊記号が無数にあるので自力で全部やるのは不可能
ライブラリを使ってエスケープする
Javascriptのインジェクション
HTMLインジェクションはすべて対策したとする
Form Inputに以下を入力してみる
;alert(0)
";aler(0)
+"";alert(0)
どのような場合に発生するのか
なぜこれが危険なのか
任意のJavascriptを実行可能になる
どうやって対策するのか
Form Inputに ;SELECT * FROM user とか入れてみる
どのような場合に発生するのか
なぜこれが危険なのか
どうやって対策するのか
Form Inputに ; ls * とか入れてみる
どのような場合に発生するのか
なぜこれが危険なのか
どうやって対策するのか
どのような場合に発生するのか
なぜこれが危険なのか
どうやって対策するのか
HTML Formを適当な場所に設置して、actionを別のサーバーにしてみる
どのような場合に発生するのか
なぜこれが危険なのか
どうやって対策するのか
GETリクエストで変化するAPIに対して、img要素などを設置したHTMLを開かせる
どのような場合に発生するのか
なぜこれが危険なのか
どうやって対策するのか